package com.demo.java.OD351_400.OD354;

import java.util.Scanner;
import java.util.StringTokenizer;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【代码编辑器(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146164729
 */
public class OdMain {
    public static void main(String[] args) {
        // 使用Scanner读取输入
        Scanner scanner = new Scanner(System.in);

        // 读取第一行，得到操作次数 k
        int k = Integer.parseInt(scanner.nextLine());

        // 读取第二行，得到初始字符串
        String inputString = scanner.nextLine();

        // 创建二维数组用于存储操作命令
        String[][] operations = new String[k][2];

        // 读取后续的操作命令
        for (int i = 0; i < k; i++) {
            StringTokenizer tokenizer = new StringTokenizer(scanner.nextLine());
            operations[i][0] = tokenizer.nextToken();
            operations[i][1] = tokenizer.nextToken();
        }

        // 使用StringBuilder处理字符串，因为它支持可变字符序列
        StringBuilder sb = new StringBuilder(inputString);
        int index = 0; // 初始化光标位置为字符串的开始

        // 依次处理每一条操作
        for (String[] operation : operations) {
            if (operation[0].equals("FORWARD")) {
                // 光标向前移动
                index = Math.min(index + Integer.parseInt(operation[1]), sb.length());
            } else if (operation[0].equals("BACKWARD")) {
                // 光标向后移动
                index = Math.max(index - Integer.parseInt(operation[1]), 0);
            } else if (operation[0].equals("SEARCH-FORWARD")) {
                // 向前查找指定单词
                int foundIndex = sb.indexOf(operation[1], index);
                if (foundIndex != -1) {
                    index = foundIndex;
                } else {
                    index = sb.length(); // 未找到时将光标移动到文本末尾
                }
            } else if (operation[0].equals("SEARCH-BACKWARD")) {
                // 向后查找指定单词
                int foundIndex = sb.lastIndexOf(operation[1], index);
                if (foundIndex != -1) {
                    index = foundIndex;
                } else {
                    index = 0; // 未找到时将光标移到文本开头
                }
            } else if (operation[0].equals("INSERT")) {
                // 在光标位置插入文本
                sb.insert(index, operation[1]);
                index += operation[1].length(); // 光标移动到插入文本的末尾
            } else if (operation[0].equals("REPLACE")) {
                // 替换光标位置的文本
                sb.replace(index, index + operation[1].length(), operation[1]);
            } else if (operation[0].equals("DELETE")) {
                // 删除光标位置的指定长度文本
                int deleteLength = Integer.parseInt(operation[1]);
                sb.delete(index, index + deleteLength);
            }
        }

        // 输出最终结果
        System.out.println(sb.toString());
    }
}